package com.hfh.map;

import org.junit.Test;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo {
    @Test
    public void test4() {
        //        元视图操作的方法：
//        Set keySet()：返回所有key构成的Set集合
        // Map的遍历
        Map<Integer, String> map = new HashMap<>();
        map.put(1001, "张三");
        map.put(1002, "李四");
        map.put(1003, "王五");

        Set<Integer> set = map.keySet();
        System.out.println(set);
        for (Integer no : set) {
            System.out.println("key:" + no);
            System.out.println("value:" + map.get(no));
        }

        System.out.println("--------------");
        // Set entrySet()：返回所有key-value对构成的Set集合
//        Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
        Set<Map.Entry<Integer, String>> entrySet = map.entrySet();

        for (Map.Entry<Integer, String> entry : entrySet) {
            System.out.println("key:" + entry.getKey());
            System.out.println("value:" + entry.getValue());
        }

        System.out.println("--------------");

//        Collection values()：返回所有value构成的Collection集合
        // 如果实现类是HashMap, 返回的是HashMap的叫Values内部类
        Collection c = map.values();
        System.out.println(c);


    }


    @Test
    public void test3() {
        Map<Integer, String> map = new HashMap<>();
        map.put(1001, "张三");
        map.put(1002, "李四");
        map.put(1003, "王五");

        //        元素查询的操作：
//        Object get(Object key)：获取指定key对应的value
        String val = map.get(1003);
        System.out.println(val);

//        boolean containsKey(Object key)：是否包含指定的key
        boolean flag = map.containsKey(1004);
        System.out.println(flag);//false

//        boolean containsValue(Object value)：是否包含指定的value
        System.out.println(map.containsValue("张三"));// true
        System.out.println(map.containsValue("小明"));// false

//        int size()：返回map中key-value对的个数
        System.out.println(map);
        int size = map.size();
        System.out.println(size);//3

//        boolean isEmpty()：判断当前map是否为空
        System.out.println(map.isEmpty());//false


//        boolean equals(Object obj)：判断当前map和参数对象obj是否相等
        Map<Integer, String> subMap = new HashMap<>();
        subMap.put(1001, "张三");
        subMap.put(1002, "李四");
//        subMap.put(1003, "王五");
        flag = map.equals(subMap);
        System.out.println(flag);


    }

    @Test
    public void test1() {
        Map<Integer, String> map = new HashMap<>();
//        添加、删除、修改操作：
//        Object put(Object key,Object value)：将指定key-value添加到(或修改)当前map对象中
        map.put(1001, "张三");
        map.put(1002, "李四");
        map.put(1003, "王五");

        // 如果添加的key在Map中已经存在, 那么put操作就是修改
        map.put(1003, "晓明");
        System.out.println(map);

//        void putAll(Map m):将m中的所有key-value对存放到当前map中
        Map<Integer, String> subMap = new HashMap<>();
        subMap.put(1003, "小红");// 如果key已经在map中存在, 会修改元素的值
        subMap.put(1005, "小花");
        map.putAll(subMap);
        System.out.println(map);

//        Object remove(Object key)：移除指定key的key-value对，并返回value
        map.remove(1002);
        System.out.println(map);

//        void clear()：清空当前map中的所有数据
        map.clear();
        System.out.println(map);


    }
}
